package com.gjx.leetcode;

import java.util.ArrayList;
import java.util.List;

//78. 子集
//给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
//
//说明：解集不能包含重复的子集。
//
//示例:
//
//输入: nums = [1,2,3]
//输出:
//[
//  [3],
//  [1],
//  [2],
//  [1,2,3],
//  [1,3],
//  [2,3],
//  [1,2],
//  []
//]




public class Solution078 {
	public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        dfs(nums, 0, res, new ArrayList<>());
        return res;
    }
	
	private void dfs(int[] nums, int start, List<List<Integer>> res, List<Integer> path) {
		
		res.add(new ArrayList<>(path));
		
		for (int i=start; i<nums.length; i++) {
			path.add(nums[i]);
			dfs(nums, i+1, res, path);
			path.remove(path.size()-1);
		}
		
	}
	
}
